/**
 * 
 */
package com.kerrykidz.membership.service;

import java.util.List;
import java.util.Map;

import com.kerrykidz.filemanagement.dao.model.HisCarCareEntity;
import com.kerrykidz.membership.dao.model.CusGuaEntity;
import com.kerrykidz.membership.dao.model.CusMemEntity;
import com.kerrykidz.membership.dao.model.CusMemSuspendEntity;
import com.kerrykidz.membership.dao.model.GblCusCReltypeEntity;
import com.rdp.framework.exception.RDPException;

/**
 * @author Tik
 * 
 */
public interface IMemberService {

	/**
	 * 根据会员ID查询会员
	 */
	public CusMemEntity findMemberById(String memberId) throws RDPException;
	
	/**
	 * 根据会员姓名查询会员
	 */
	public CusMemEntity findMemberByMemName(String memName) throws RDPException;

	/**
	 * 根据会员ID查询会员及其兄弟姐妹
	 */
	public List<CusMemEntity> findMemberAndSiblingsById(String memberId) throws RDPException;
	
	/**
	 * 根据会员ID查询会员及其兄弟姐妹（现场）
	 */
	public List<CusMemEntity> findSiteMemberAndSiblingsById(String memberId) throws RDPException;

	/**
	 * 根据姓名或号码查询用户信息
	 * 
	 * @param nameOrTel
	 *            当为姓名时，查询会员信息;当为号码时，查询号码对应的监护人所属的会员信息;
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByNameOrTel(String nameOrTel) throws RDPException;
	
	/**
	 * 根据姓名或号码查询用户信息(现场)
	 * 
	 * @param nameOrTel
	 *            当为姓名时，查询会员信息;当为号码时，查询号码对应的监护人所属的会员信息;
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findSiteMemberByNameOrTel(String nameOrTel, String fkBranId) throws RDPException;

	/**
	 * 查询指纹对应人员信息
	 * 
	 * @param fingerprint
	 *            指纹数据
	 * @return 如果为会员、非会员则返回CusMemEntity 如果为监护人则返回CusGuaEntity
	 *         如果为销售则返回SecUsrEntity
	 * @throws RDPException
	 */
	public Object findFingerprint(String fingerprint) throws RDPException;

	/**
	 * 根据会员编号查询监护人列表
	 */
	public List<CusGuaEntity> findGuaByMemberId(String memberId) throws RDPException;
	
	/**
	 * 根据会员编号查询监护人列表(现场)
	 */
	public List<CusGuaEntity> findSiteGuaByMemberId(String memberId) throws RDPException;

	/**
	 * 取得会员玩伴券
	 * 
	 * @param memberId
	 *            会员编号
	 * @return
	 * @throws RDPException
	 */
	public List<Map<String, Object>> findVoucherCouponsByMemberId(String memberId) throws RDPException;

	/**
	 * 取得所有关系类型
	 * 
	 * @return
	 * @throws RDPException
	 * @date: 2014年8月15日
	 */
	public List<GblCusCReltypeEntity> findReltypes() throws RDPException;

	/**
	 * 删除会员
	 * 
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年8月15日
	 */
	public void deleteMember(CusMemEntity member) throws RDPException;

	/**
	 * 验证指纹是否已存在
	 * 
	 * @param fingerprint
	 * @return int 0:不存在 1：会员 2：监护人 3：销售
	 * @throws RDPException
	 * @date: 2014年8月17日
	 */
	public int checkFingerprintExist(String fingerprint) throws RDPException;

	/**
	 * 
	 * @Description 根据监护人查找小孩信息
	 * @param guaId
	 * @return
	 * @author QUINN
	 * @date 2014年8月19日上午10:18:25
	 */
	List<CusMemEntity> findByGua(String guaId);
	
	/**
	 * 
	 * @Description 根据会员号获取客服历史
	 * @param guaId
	 * @return
	 * @author YJJ
	 * @date 2014年8月19日上午10:18:25
	 */
	public List<HisCarCareEntity> getCarFormHisList(List<String> memberIdList);
	
	/**
	 * 
	 * @Description 修改会员
	 * @param guaId
	 * @return
	 * @author YJJ
	 * @throws RDPException 
	 * @date 2014年8月19日上午10:18:25
	 */
	public void updateMember(CusMemEntity member) throws RDPException;
	
	/**
	 * 创建会员历史记录（收银后调用）
	 * @param orderId
	 * @throws RDPException
	 * @date: 2014年8月27日
	 */
	public void createMemHis(String orderId) throws RDPException;
	
	/**
	 * 取得该会员带了几个非会员购单次票
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年9月11日
	 */
	public Integer checkBdyCount(String memberId) throws RDPException;
	
	/**
	 * 验证指定会员是否还有未使用的单次票
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年11月13日
	 */
	public boolean checkEnableSingleByMemberId(String memberId) throws RDPException;
	
	/**
	 * 根据姓名或号码查询用户信息(现场，销售)
	 * 
	 * @param nameOrTel
	 *            当为姓名时，查询会员信息;当为号码时，查询号码对应的监护人所属的会员信息;
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByNameOrTelAndSale(String nameOrTel, String userId, String fkBranId) throws RDPException;
	
	/**
	 * 会员失效、取消停卡，每天执行一次
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void doQuarz() throws RDPException;
	
	/**
	 * 修改听卡记录
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateEntity(CusMemSuspendEntity cusMemSuspendEntity) throws RDPException;
	
	public void cancelStopCard(CusMemEntity member, CusMemSuspendEntity cusMemSuspend) throws RDPException;
	
	/**
	 * 查找退会所需相关信息
	 * @param memberId
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月29日
	 */
	public CusMemEntity getRetreatMember(String memberId) throws RDPException;

	/**
	 * 退会
	 * @param memberId
	 * @param memberId
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月29日
	 */
	public void retreatMember(CusMemEntity member) throws RDPException;
}
